//引入表单验证库
import Schema from "validate"
//创建验证规则
const roomInfo = new Schema(
  {
    //楼栋
    building: {
      type: String, // 类型
      required: true, // 非空
      message: '楼栋不能为空', // 提示信息
    },
    // 房号
    room: {
      type: String, // 类型
      required: true, // 非空
      message: '房号不能为空', // 提示信息
    },
    // 姓名
    name: {
      type: String, // 类型
      match: /^[\u4e00-\u9fa5]{2,6}$/, // 中文正则
      message: '姓名中文 2-6位', // 提示信息
    },
    // 手机号码
    mobile: {
      type: String, // 类型
      match: /^1[3-9]\d{9}$/, // 手机号码
      message: '手机不合法', // 提示信息
    },
    // 身份证背面
    idcardBackUrl: {
      type: String, // 类型
      required: true, // 非空
      message: '身份证背面不能为空', // 提示信息
    },
    // 身份证正面
    idcardFrontUrl: {
      type: String, // 类型
      required: true, // 非空
      message: '身份证正面不能为空', // 提示信息
    },
  },
  { strip: false } // 解决 验证对象后，数据丢失属性的问题！！
)
Page({
  data: {
    // 接口文档中查看
    /* 小区楼栋信息 */
    building: '',
    /* 业主性别0女1男 */
    gender: '1',
    /* 身份证背面 */
    idcardBackUrl: '',
    /* 身份证正面 */
    idcardFrontUrl: '',
    /* 业主电话 */
    mobile: '13545164852',
    /* 业主姓名 */
    name: '王不留行',
    /* 小区信息 */
    point: '',
    /* 小区房间信息 */
    room: '',
  },
  async onLoad({ point, building, room, id }) {
    if (id) {
      wx.setNavigationBarTitle({ title: '编辑房屋信息' })
      //根据id来获取房屋信息，设置到Data
      const res = await wx.http({
        url: '/room/' + id
      })
      const { status, ...data } = res.data
      this.setData(data)
    } else {
      wx.setNavigationBarTitle({ title: '添加房屋信息' })
      this.setData({
        point,
        building,
        room,
      })
    }
  },
  //验证业主姓名
  // verifyName() {
  //   const res = /^[\u4e00-\u9fa5]{2,5}$/ //必须为汉字
  //   //验证业主姓名
  //   const valid = res.test(this.data.name.trim())
  //   if (!valid)wx.utils.toast('请填写真实的中文姓名!')
  //   return valid
  // },
  // verifyMobile() {
  //   // 验证手机号
  //   const reg = /^[1][3-8][0-9]{9}$/
  //   const valid = reg.test(this.data.mobile)
  //   // 验证结果提示
  //   if (!valid) wx.utils.toast('请填写正确的手机号码!')
  //   // 返回验证结果
  //   return valid
  // },
  // verifyPicture() {
  //   // 图片地址不能为空
  //   const valid = !!this.data.idcardBackUrl && !!this.data.idcardFrontUrl
  //   // 验证结果提示
  //   if (!valid) wx.utils.toast('请上传身份证照片!')
  //   // 返回验证结果
  //   return valid
  // },
  async goList() {
    // // 逐个验证表单的数据
    // if (!this.verifyName()) return
    // if (!this.verifyMobile()) return
    // if (!this.verifyPicture()) return
    // // 删除一些数据
    // delete this.data.__webviewId__
    // // 请求数据接口
    // const { code } = await wx.http.post('/room', this.data)
    // // 检测接口调用的结果
    // if (code !== 10000) return wx.utils.toast('添加房屋失败!')

    // // 成功后跳转至房屋列表
    // wx.navigateBack({
    //   delta: 4,
    // })
    const { id, building, gender, idcardBackUrl, idcardFrontUrl, mobile, name, point, room } = this.data

    const params = { id, building, gender, name, mobile, idcardBackUrl, idcardFrontUrl, point, room }

    // 开始验证
    const errors = roomInfo.validate(params) // 默认情况，会自动的帮你移除到 要验证的对象中属性（如果这个属性没有在你的验证规则中出现），

    if (errors.length) {
      // 有错误
      wx.utils.toast(errors[0].message)
      return
    }
    //对params.id做一个判断，如果id等于undefined,则删除id
    if (params.id === undefined) {
      //删除对象中的属性
      delete params.id
    }
    // 构造数据，调用接口发送给后端
    // console.log(params)
    const res = await wx.http({
      url: '/room',
      method: 'post',
      data: params
    })
    if (res.code !== 10000) {
      return wx.utils.toast(res.message)
    }
    console.log(params);
    wx.showToast({ title: '操作成功' })
    setTimeout(() => {
      wx.navigateTo({
        url: '/house_pkg/pages/list/index'
      })
    }, 1500)
  },
  //上传图片
  async onChooseMedia(ev) {
    const res = await wx.chooseMedia({
      count: 1,
      mediaType: ['image']
    })
    //获取临时文件路径
    const { tempFilePath } = res.tempFiles[0]
    //把临时文件上传到服务器
    wx.uploadFile({
      url: wx.http.baseURL + '/upload',
      //文件临时路径
      filePath: tempFilePath,
      //获取文件的key 给后端去获取
      name: 'file',
      //请求头 token
      header: {
        Authorization: `Bearer ${getApp().token}`
      },
      success: (res) => {
        console.log(res);
        const data = JSON.parse(res.data)
        //无法确定正面还是反面
        const type = ev.mark.type
        this.setData({
          [type]: data.data.url
        })
      },
      fail: (err) => {
        console.log(err);
      }
    })
  },
  //删除图片
  removePicture(ev) {
    // 移除图片的类型（身份证正面或反面）
    const type = ev.mark.type
    this.setData({
      [type]: ''
    })
  },
})
